iswitchb-read-buffer: check that iswitchb-exit is not 'usefirst (set
authorStephen Eglen <stephen@gnu.org>
Tue, 25 Nov 2003 14:37:44 +0000 (14:37 +0000)
committerStephen Eglen <stephen@gnu.org>
Tue, 25 Nov 2003 14:37:44 +0000 (14:37 +0000)
when user presses RETURN to select buffer) before running:

;; This happens for example if the buffer was chosen with the mouse.
(setq iswitchb-matches (list iswitchb-final-text)))

iswitchb-exit-minibuffer: set iswitchb-exit to 'usefirst.

These changes were made to fix the following bug reported by Markus
Rost and John Wiegley:

Evaluate:
(progn
   (iswitchb-mode 1)
   (get-buffer-create "12")
   (get-buffer-create "1")
   (iswitchb-buffer))

You get prompted in the minibuffer.  Type "1".  The minibuffer shows

 iswitch 1{12,1}

Hit RET.  You find yourself in buffer "1" instead of "12", as you
would expect from the documentation.

This bug was introduced when iswitchb-read-buffer was updated to allow
user to select items from the *Completions* buffer with the mouse.

lisp/iswitchb.el

index d8f2a5cb214308f2df9d06541e9c6fff00c7ccc5..51797da56058a5727326b50a404c6e5131917690 100644 (file)
@@ -610,7 +610,8 @@ If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
                                 nil    ;require-match [handled elsewhere]
                                 nil    ;initial-contents
                                 'iswitchb-history)))
-    (if (get-buffer iswitchb-final-text)
+    (if (and (not (eq iswitchb-exit 'usefirst))
+            (get-buffer iswitchb-final-text))
        ;; This happens for example if the buffer was chosen with the mouse.
        (setq iswitchb-matches (list iswitchb-final-text)))
 
@@ -712,7 +713,9 @@ The result is stored in `iswitchb-common-match-string'."
   (interactive)
   (if (or (not iswitchb-require-match)
           (iswitchb-existing-buffer-p))
-      (throw 'exit nil)))
+      (progn
+       (setq iswitchb-exit 'usefirst)
+       (throw 'exit nil))))
 
 (defun iswitchb-select-buffer-text ()
   "Select the buffer named by the prompt.